home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / wasm223.zip / KEYBRD.ASM < prev    next >
Assembly Source File  |  1993-05-04  |  7KB  |  278 lines

  1. ;**********************************;
  2. ; WASM Keyboard Module             ;
  3. ; By Eric Tauck                    ;
  4. ;                                  ;
  5. ; Defines:                         ;
  6. ;                                  ;
  7. ;   KeyGet  get key if available   ;
  8. ;   KeyWai  wait for a keystroke   ;
  9. ;   KeyRep  replace a keystroke    ;
  10. ;   KeyHit  return keyboard status ;
  11. ;   KeyClr  clear keyboard buffer  ;
  12. ;**********************************;
  13.  
  14.         jmps    _keybrd_end
  15.  
  16. _key_put        DW      0       ;put back keystroke
  17.  
  18. ;========================================
  19. ; Keystroke constants.
  20.  
  21. KEY_BKSP        EQU     8
  22. KEY_TAB         EQU     9
  23. KEY_ENTER       EQU     13
  24. KEY_ESC         EQU     27
  25.  
  26. KEY_SHF_TAB     EQU     -15
  27.  
  28. KEY_CTL_ENTER   EQU     10
  29. KEY_CTL_SLASH   EQU     28
  30. KEY_CTL_MINUS   EQU     31
  31. KEY_CTL_BKSP    EQU     127
  32.  
  33. KEY_ALT_MINUS   EQU     -130
  34. KEY_ALT_EQUAL   EQU     -131
  35.  
  36. ;--- number keys
  37.  
  38. KEY_CTL_2       EQU     3
  39. KEY_CTL_6       EQU     30
  40.  
  41. KEY_ALT_0       EQU     -129
  42. KEY_ALT_1       EQU     -120
  43. KEY_ALT_2       EQU     -121
  44. KEY_ALT_3       EQU     -122
  45. KEY_ALT_4       EQU     -123
  46. KEY_ALT_5       EQU     -124
  47. KEY_ALT_6       EQU     -125
  48. KEY_ALT_7       EQU     -126
  49. KEY_ALT_8       EQU     -127
  50. KEY_ALT_9       EQU     -128
  51.  
  52. ;--- letter keys
  53.  
  54. KEY_CTL_A       EQU     1
  55. KEY_CTL_B       EQU     2
  56. KEY_CTL_C       EQU     3
  57. KEY_CTL_D       EQU     4
  58. KEY_CTL_E       EQU     5
  59. KEY_CTL_F       EQU     6
  60. KEY_CTL_G       EQU     7
  61. KEY_CTL_H       EQU     8
  62. KEY_CTL_I       EQU     9
  63. KEY_CTL_J       EQU     10
  64. KEY_CTL_K       EQU     11
  65. KEY_CTL_L       EQU     12
  66. KEY_CTL_M       EQU     13
  67. KEY_CTL_N       EQU     14
  68. KEY_CTL_O       EQU     15
  69. KEY_CTL_P       EQU     16
  70. KEY_CTL_Q       EQU     17
  71. KEY_CTL_R       EQU     18
  72. KEY_CTL_S       EQU     19
  73. KEY_CTL_T       EQU     20
  74. KEY_CTL_U       EQU     21
  75. KEY_CTL_V       EQU     22
  76. KEY_CTL_W       EQU     23
  77. KEY_CTL_X       EQU     24
  78. KEY_CTL_Y       EQU     25
  79. KEY_CTL_Z       EQU     26
  80.  
  81. KEY_ALT_A       EQU     -30
  82. KEY_ALT_B       EQU     -48
  83. KEY_ALT_C       EQU     -46
  84. KEY_ALT_D       EQU     -32
  85. KEY_ALT_E       EQU     -18
  86. KEY_ALT_F       EQU     -33
  87. KEY_ALT_G       EQU     -34
  88. KEY_ALT_H       EQU     -35
  89. KEY_ALT_I       EQU     -23
  90. KEY_ALT_J       EQU     -36
  91. KEY_ALT_K       EQU     -37
  92. KEY_ALT_L       EQU     -38
  93. KEY_ALT_M       EQU     -50
  94. KEY_ALT_N       EQU     -49
  95. KEY_ALT_O       EQU     -24
  96. KEY_ALT_P       EQU     -25
  97. KEY_ALT_Q       EQU     -16
  98. KEY_ALT_R       EQU     -19
  99. KEY_ALT_S       EQU     -31
  100. KEY_ALT_T       EQU     -20
  101. KEY_ALT_U       EQU     -22
  102. KEY_ALT_V       EQU     -47
  103. KEY_ALT_W       EQU     -17
  104. KEY_ALT_X       EQU     -45
  105. KEY_ALT_Y       EQU     -21
  106. KEY_ALT_Z       EQU     -44
  107.  
  108. ;--- arrow keys
  109.  
  110. KEY_LEFT        EQU     -75
  111. KEY_RIGHT       EQU     -77
  112. KEY_UP          EQU     -72
  113. KEY_DOWN        EQU     -80
  114. KEY_PGUP        EQU     -73
  115. KEY_PGDN        EQU     -81
  116. KEY_HOME        EQU     -71
  117. KEY_END         EQU     -79
  118.  
  119. KEY_CTL_LEFT    EQU     -115
  120. KEY_CTL_RIGHT   EQU     -116
  121. KEY_CTL_PGUP    EQU     -132
  122. KEY_CTL_PGDN    EQU     -118
  123. KEY_CTL_HOME    EQU     -119
  124. KEY_CTL_END     EQU     -117
  125.  
  126. KEY_INS         EQU     -82
  127. KEY_DEL         EQU     -83
  128.  
  129. ;--- function keys
  130.  
  131. KEY_F1          EQU     -59
  132. KEY_F2          EQU     -60
  133. KEY_F3          EQU     -61
  134. KEY_F4          EQU     -62
  135. KEY_F5          EQU     -63
  136. KEY_F6          EQU     -64
  137. KEY_F7          EQU     -65
  138. KEY_F8          EQU     -66
  139. KEY_F9          EQU     -67
  140. KEY_F10         EQU     -68
  141.  
  142. KEY_SHF_F1      EQU     -84
  143. KEY_SHF_F2      EQU     -85
  144. KEY_SHF_F3      EQU     -86
  145. KEY_SHF_F4      EQU     -87
  146. KEY_SHF_F5      EQU     -88
  147. KEY_SHF_F6      EQU     -89
  148. KEY_SHF_F7      EQU     -90
  149. KEY_SHF_F8      EQU     -91
  150. KEY_SHF_F9      EQU     -92
  151. KEY_SHF_F10     EQU     -93
  152.  
  153. KEY_CTL_F1      EQU     -94
  154. KEY_CTL_F2      EQU     -95
  155. KEY_CTL_F3      EQU     -96
  156. KEY_CTL_F4      EQU     -97
  157. KEY_CTL_F5      EQU     -98
  158. KEY_CTL_F6      EQU     -99
  159. KEY_CTL_F7      EQU     -100
  160. KEY_CTL_F8      EQU     -101
  161. KEY_CTL_F9      EQU     -102
  162. KEY_CTL_F10     EQU     -103
  163.  
  164. KEY_ALT_F1      EQU     -104
  165. KEY_ALT_F2      EQU     -105
  166. KEY_ALT_F3      EQU     -106
  167. KEY_ALT_F4      EQU     -107
  168. KEY_ALT_F5      EQU     -108
  169. KEY_ALT_F6      EQU     -109
  170. KEY_ALT_F7      EQU     -110
  171. KEY_ALT_F8      EQU     -111
  172. KEY_ALT_F9      EQU     -112
  173. KEY_ALT_F10     EQU     -113
  174.  
  175. ;========================================
  176. ; Input a keystroke if available.
  177. ;
  178. ; Out: AX= keystroke (extended keystrokes
  179. ;      are returned as a special 16 bit
  180. ;      value equated above); CY= set if
  181. ;      keystroke unavailable.
  182.  
  183. KeyGet  PROC    NEAR
  184.         cmp     _key_put, 1     ;check if key waiting
  185.         jnc     _kychk1         ;jump if so (also CY is cleared)
  186.  
  187.         mov     ah, 6           ;direct console i/o
  188.         mov     dl, 0FFH        ;input subfunction
  189.         int     21H             ;execute
  190.         jnz     _kychk2         ;jump if key
  191.         sub     ax, ax          ;return zero (non-key)
  192.         stc
  193.         ret
  194.  
  195. ;--- key in buffer
  196.  
  197. _kychk1 mov     ax, _key_put    ;return key
  198.         mov     _key_put, 0     ;zero storage
  199.         ret
  200.  
  201. ;--- standard code
  202.  
  203. _kychk2 or      al, al          ;check if extended code
  204.         jz      _kychk3         ;jump if so
  205.         sub     ah, ah          ;zero high byte
  206.         clc
  207.         ret
  208.  
  209. ;--- extended code
  210.  
  211. _kychk3 mov     ah, 6           ;direct console i/o
  212.         mov     dl, 0FFH        ;input subfunction
  213.         int     21H             ;execute
  214.         sub     ah, ah          ;zero high byte
  215.         neg     ax              ;return negative
  216.         clc
  217.         ret
  218.         ENDP
  219.  
  220. ;========================================
  221. ; Input a keystroke.
  222. ;
  223. ; Out: AX= keystroke (extended keystrokes
  224. ;      are returned as a special 16 bit
  225. ;      value equated above).
  226.  
  227. KeyWai  PROC    NEAR
  228. _kyget1 call    KeyGet          ;get keystroke
  229.         jc      _kyget1         ;loop until key
  230.         ret
  231.         ENDP
  232.  
  233. ;========================================
  234. ; Replace a keystroke.
  235. ;
  236. ; In: AX= keystroke.
  237.  
  238. KeyRep  PROC    NEAR
  239.         mov     _key_put, ax
  240.         ret
  241.         ENDP
  242.  
  243. ;========================================
  244. ; Return the keyboard status.
  245. ;
  246. ; Out: CY= set if key unavailable.
  247. ;
  248. ; NOTE: ^S doesn't work right with this
  249. ; DOS function (at least my DOS). If ^S
  250. ; is pressed, DOS will pause within func-
  251. ; tion 0BH. When a second key is pressed
  252. ; to un-pause DOS, the keystroke is
  253. ; absorbed by DOS but the function says
  254. ; a keystroke is available (which there
  255. ; isn't).  The other functions use
  256. ; KeyGet which performs almost the same
  257. ; task but has no trouble with ^S.
  258.  
  259. KeyHit  PROC    NEAR
  260.         cmp     _key_put, 1     ;check if greater than zero
  261.         jnc     _kyhit1         ;jump if so, CY cleared
  262.         mov     ah, 0BH         ;keyboard status function
  263.         int     21H             ;execute
  264.         cmp     al, 0FFH        ;set carry if not FFH
  265. _kyhit1 ret
  266.         ENDP
  267.  
  268. ;========================================
  269. ; Clear keyboard buffer.
  270.  
  271. KeyClr  PROC    NEAR
  272. _kyclr1 call    KeyGet
  273.         jnc     _kyclr1
  274.         ret
  275.         ENDP
  276.  
  277. _keybrd_end
  278.